package com.fary.event;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

//使用注解@Commponent将MyInit交由Spring IoC容器进行管理
@Component
//实现ApplicationListener接口来作为应用事件监听者，并通过指定泛型参数为
//ContextRefreshedEvent来表明自己只关心ContextRefreshedEvent事件
public class MyInit implements ApplicationListener<ContextRefreshedEvent> {
 
    @Override
    //事件处理函数
    public void onApplicationEvent(ContextRefreshedEvent event){
        //此处判断主要是用于解决web应用中的重复刷新问题，因为web应用中会存在父子容器，导致
        //事件ContextRefreshedEvent会被触发多次。通过限定只在父容器刷新事件触发时才进行
        //处理,从而解决多次触发问题。
        if(event.getApplicationContext().getParent()==null){
            //初始化函数
            init();
        }
    }
 
    //自定义初始化
    private void init(){
        //自定义的初始化逻辑
        System.out.println("init");
    }
}